/*
* 添加请求拦截器：
* 拦截request请求
* 拦截uploadfile上传文件
* 1.非http开头需要拼接地址
* 2.请求超时
* 3.添加App端请求头标识
* 4.添加token请求标识

*/
// 服务器基础地址
const baseURL = 'https://www.zjxcqczl.com/api'

// 添加请求拦截器
const httpInterceptor = {
    // 拦截前触发
    invoke (options) {
        // 逆经纬度取消跨域
        if (options.url == 'https://restapi.amap.com/v3/geocode/regeo') {
            return 
        }
        // 1.非http开头需要拼接地址
        if (!options.url.startsWith('http')) {
            options.url = baseURL + options.url
        }
        // 2.请求超时 10s
        options.timeout = 10000
        // 3.添加App端请求头标识
        const token = uni.getStorageSync('token')
        if (token) {
            options.header = {
                ...options.header, // 保留原有头部信息
                'token': token
            }
        }
        //4.添加token请求标识
        const tokeninfo = uni.getStorageSync('token')
        if (tokeninfo) {
            options.header = {
                ...options.header,
                Authorization: `Bearer ${tokeninfo}`
            }
        }
    }
}
uni.addInterceptor('request', httpInterceptor)
uni.addInterceptor('uploadfile', httpInterceptor)

// 封装Promise请求函数
export const $H = options => {
    // 1.返回Promise对象
    return new Promise((resolve, reject) => {
        uni.request({
            sslVerify: false,
            enableHttp2: true,
            ...options,
            success (res) {
                if (res.statusCode >= 200 && res.statusCode < 300) {
                    resolve(res.data)
                } else if (res.statusCode === 401) {
                    uni.navigateTo({ url: '/pages/login/login' })
                    reject(res)
                } else {
                    uni.showToast({
                        icon: 'none',
                        title: res.data.msg || '请求失败'
                    })
                    reject(res)
                }
            },
            fail (err) {
                uni.showToast({
                    icon: 'none',
                    title: '网络错误，换个网络试试'
                })
                reject(err)
            }
        })
    })
}
